
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.sgc.view.mbean;

import com.brain.core.view.mbean.*;
import com.brain.core.dto.ParametroDto;
import com.brain.core.exception.DAOException;
import com.brain.core.manager.RecursosManager;
import com.brain.core.view.util.ConstantesCore;
import com.brain.sgc.dto.DocumentoDto;
import com.brain.sgc.dto.PersonaDto;
import com.brain.sgc.manager.DocumentoManager;
import com.brain.sgc.view.util.ConstantesSgc;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;
import javax.faces.event.ActionEvent;
import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Hvives
 */
@Controller("documentoMBean")
@Scope("session")
public class DocumentoMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(DocumentoMBean.class);
    @Resource
    private DocumentoManager manager;
    @Resource
    private RecursosManager recursosManager;
    private List<DocumentoDto> lista;
    private DocumentoDto dto;
    private DocumentoDto dtoFiltro;
    private PersonaDto personaDto;
    private String keyTitulo = "documento.panel";
    @Autowired
    private ApplicationMBean applicationMBean;
    @Autowired
    private SessionMBean sessionMBean;
    private List<ParametroDto> listaTipos;
    private List<ParametroDto> listaEstados;
    private String urlInvocador;

    public DocumentoMBean() {
        this.dtoFiltro = new DocumentoDto();
    }

    public String iniciar() {
        this.obtenerDocumentosPorPersona(this.personaDto.getId());
        this.dto = new DocumentoDto();
        this.dto.setCaduce(Boolean.FALSE);
        this.dtoFiltro = new DocumentoDto();
        return ConstantesSgc.UrlNavegacion.URL_LEGAJO;
    }

    public void nuevo() {
        sessionMBean.setAccion(ConstantesSgc.Formulario.NUEVO);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.dto = new DocumentoDto();
        this.dto.setCaduce(Boolean.FALSE);
        this.dto.setTipoDto(new ParametroDto(40298L));
        this.lista = new ArrayList<DocumentoDto>();
    }

    public void editar() {
        sessionMBean.setAccion(ConstantesSgc.Formulario.EDITAR);
    }

    public void ver() {
        sessionMBean.setAccion(ConstantesSgc.Formulario.VER);
    }

    public void buscar(ActionEvent ae) {
        this.dto = new DocumentoDto();
        this.dto.setCaduce(Boolean.FALSE);
        try {
            this.lista = this.manager.obtenerDocumentos(this.dtoFiltro, this.personaDto.getId());

        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public void guardar() {

        RequestContext context = RequestContext.getCurrentInstance();
        this.dto.setPersonaDto(this.personaDto);
        boolean resultado = this.manager.guardar(this.dto);
        this.obtenerDocumentosPorPersona(this.personaDto.getId());
        context.addCallbackParam("CallbackParam", resultado);
    }

    public void resetCaducidad() {
        this.dto.setFechaCaducidad(null);
        this.dto.setMesesCaducidad(null);
    }

    protected void obtenerDocumentosPorPersona(Long idPerson) {
        try {
            this.lista = this.manager.obtenerDocumentosPorPersona(idPerson);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public String retroceder() {
        if (!this.urlInvocador.equals("")){
            return this.urlInvocador;
        }
        return "";
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        DocumentoMBean.logger = logger;
    }

    public DocumentoManager getManager() {
        return manager;
    }

    public void setManager(DocumentoManager manager) {
        this.manager = manager;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public List<DocumentoDto> getLista() {
        return lista;
    }

    public void setLista(List<DocumentoDto> lista) {
        this.lista = lista;
    }

    public DocumentoDto getDto() {
        return dto;
    }

    public void setDto(DocumentoDto dto) {
        this.dto = dto;
    }

    public DocumentoDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(DocumentoDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyTitulo() {
        return keyTitulo;
    }

    public void setKeyTitulo(String keyTitulo) {
        this.keyTitulo = keyTitulo;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public List<ParametroDto> getListaTipos() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesSgc.CatalogoParametro.TIPO_DOCUMENTO_PERSONA);
    }

    public void setListaTipos(List<ParametroDto> listaTipos) {
        this.listaTipos = listaTipos;
    }

    public List<ParametroDto> getListaEstados() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistemaAdd(ConstantesSgc.CatalogoParametro.DOCUMENTO_ESTADOS, ConstantesCore.Parametro.TODOS);
    }

    public void setListaEstados(List<ParametroDto> listaEstados) {
        this.listaEstados = listaEstados;
    }

    public PersonaDto getPersonaDto() {
        return personaDto;
    }

    public void setPersonaDto(PersonaDto personaDto) {
        this.personaDto = personaDto;
    }

    public String getUrlInvocador() {
        return urlInvocador;
    }

    public void setUrlInvocador(String urlInvocador) {
        this.urlInvocador = urlInvocador;
    }
}
